class LinkList:
    class Node:
        def __init__(self,item):
            self.item=item
            self.next=None

    class LinkListIterator:
        def __init__(self,node):
            self.node=node
        def __next__(self):
            if self.node:
                cur_node=self.node
                self.node=cur_node.next
                return cur_node.item
            else:
                raise StopIteration
        def __iter__(self):
            return self

    def __init__(self,iterable=None):
        self.head=None
        self.tail=None
        if iterable:
            self.extend(iterable)

    #插入一个元素，使用尾插法
    def append(self,obj):
        s=LinkList.Node(obj)
        if not self.head:
            self.head=s
            self.tail=s
        else:
            self.tail.next=s
            self.tail=s

    def extend(self,iterable):
        for obj in iterable:
            self.append(obj)

    def find(self,obj):
        for n in self:
            if n==obj:
                return True
        else:
            return False

    #迭代器，让列表能够循环
    def __iter__(self):
        return self.LinkListIterator(self.head)

    def __repr__(self):
        return "<<"+','.join(map(str,self))+'>>'

#类似于集合的结构
class HashTable:
    def __init__(self,size=101):
        self.size=size
        self.T=[LinkList() for _ in range(self.size)]

    def h(self,k):
        return k % self.size

    def insert(self,k):
        i=self.h(k)
        if self.find(k):
            print('Duplicated Insert')
        else:
            self.T[i].append(k)

    def find(self,k):
        i=self.h(k)
        return self.T[i].find(k)


ht=HashTable()
ht.insert(0)
ht.insert(1)
ht.insert(3)
ht.insert(102)
ht.insert(508)
print(",".join(map(str,ht.T)))
print(ht.find(3))
# lk=LinkList([1,2,3,4,5])
# print(lk)